<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>3-回调ref中回调函数执行次数问题</title>
    </head>
    <body>
        <!-- 准备好DOM容器 -->
        <div id="test"></div>

        <!-- 必须按照顺序引入JS -->
        <!-- 引入React核心库 -->
        <script src="../js/react.development.js"></script>
        <!-- 引入react-dom库，用于操作DOM -->
        <script src="../js/react-dom.development.js"></script>
        <!-- 引入babel，用于将JSX翻译为JS -->
        <script src="../js/babel.min.js"></script>

        <!-- type必须为text/babel，代表里面的内容为JSX -->
        <script type="text/babel">
            class Demo extends React.Component {
                state = { isHot: true };

                showInfo = () => {
                    const { input1 } = this;
                    alert(input1.value);
                };

                changeWeather = () => {
                    this.setState({ isHot: !this.state.isHot });
                };

                saveInput = (c) => {
                    this.input1 = c;
                    console.log("@", c);
                };

                render() {
                    // 回调函数形式的ref：使用ref属性定义一个回调函数，函数的形参为ref属性所在的真实DOM节点，函数体内部通常使用实例对象的特定属性记录该DOM节点，
                    // 后续使用对应的属性访问该DOM节点
                    // 使用回调函数形式的ref，若绑定的是内联函数，则在组件更新的时候会被调用两次。将ref设置为class的绑定函数的方式可以解决此问题。但是大多数情况下是无关紧要的。
                    return (
                        <div>
                            <h2 onClick={this.changeWeather}>
                                今天天气很{this.state.isHot ? "炎热" : "凉爽"}
                            </h2>
                            {/*<input
                                ref={(c) => {
                                    this.input1 = c;
                                    console.log("@", c);
                                }}
                                type="text"
                                placeholder="点击按钮提示数据"
                            />*/}
                            <input
                                ref={this.saveInput}
                                type="text"
                                placeholder="点击按钮提示数据"
                            />
                            &nbsp;
                            <button onClick={this.showInfo}>
                                点我提示输入的数据
                            </button>
                        </div>
                    );
                }
            }

            ReactDOM.render(<Demo />, document.getElementById("test"));
        </script>
    </body>
</html>
